package com.elloe.实现二叉树的Node节点.非递归中序遍历;

import com.elloe.实现二叉树的Node节点.Node的Java实现.Node;

import java.util.Stack;

/**
 * @author ElloeStudy(Sifa Zhang)
 * @create 2022-04-09 19:14
 * To: 真常应物，真常得性，常清常静，常清静矣
 */
public class TraversalMidByLoop {
    public void traversalMidByLoop(Node node){
        // 创建栈保存遍历的节点,但又没有遍历完全的节点（即这个节点还没有操作完，临时保存一下）
        Stack<Node> stack = new Stack<>();
        Node present = node; // 当前操作的节点
        while (present != null || !stack.isEmpty()){
            // 当前的节点不为null 且 栈不为空

            // 获取左节点
            while (present != null){
                stack.push(present);// 将present压入栈（此时这个节点还没有操作好，临时保存）
                present = present.getLeft();// 读取当前节点的左节点
            }

            if (!stack.isEmpty()){
                present = stack.pop();
                // 获取根节点
                System.out.print(present.getValue() + " ");
                present = present.getRight(); // 获取右节点
            }
        }
    }
}
